#include "shm.hpp"
#include "fifo.hpp"

int main()
{
    // 创建共享内存
    shm sh(PATHNAME, PROJID, CREATER);
    // 创建并打开管道文件
    fifofile ff(_FIFO_PATH_, _FIFO_NAME_);
    file rf(_FIFO_PATH_, _FIFO_NAME_);
    rf._readopen();
    char *msg = (char *)sh._get_addr();
    msg[0] = 0;
    printf("start address : %p\n", msg);
    // 读取数据
    while (true)
    {
        int n = rf._read(); // 等待写端写入
        if (n == 0)
            break;
        printf("read : %s\n", msg);
        sleep(1);
    }
    rf._close();
    return 0;
}

// int main()
// {
//     shm sh;
//     sh._creat();
//     sh._connect();
//     char* addr = (char*)sh._get_addr();
//     while(true)
//     {
//         printf("%s\n",addr);
//         sleep(1);
//     }
//     sh._delete_connect();
//     sh._destroy();
//     return 0;
// }

// #include <iostream>
// #include <sys/ipc.h>
// #include <sys/shm.h>
// #include <unistd.h>

// #define PATHNAME "."
// #define PROJID 0x66
// #define SIZE 4096
// int main()
// {
//     key_t key = ftok(PATHNAME, PROJID);
//     // 创建共享内存
//     int shmid = shmget(key, SIZE, IPC_CREAT | IPC_EXCL | 0666);
//     // 连接共享内存
//     char *shm = (char *)shmat(shmid, nullptr, 0);
//     //读取
//     shm[0] = 0;
//     while(true)
//     {
//         printf("%s\n",shm);
//         sleep(1);
//     }
//     // 去连接
//     shmdt(shm);
//     // 释放共享内存
//     shmctl(shmid, IPC_RMID, nullptr);
//     return 0;
// }

// #include "shm.hpp"
// #include "fifo.hpp"

// int main()
// {
//     shm sh(CREATE, PATHNAME, PROJ_ID);
//     // 创建管道文件
//     fifofile ff(_FIFO_PATH_, _FIFO_NAME_);
//     // 打开管道文件
//     file rf(_FIFO_PATH_, _FIFO_NAME_);
//     rf._readopen();
//     char *mas = (char *)sh._get_start_addr();
//     // printf("start address : %p\n", mas);
//     // 读取
//     while (true)
//     {
//         char ch;
//         int n = rf._read();
//         if (n == 0)
//             break;
//         printf("%s\n", mas);
//         sleep(1);
//     }
//     // 关闭管道文件
//     rf._close();
//     sleep(1);
//     return 0;
// }

/*int main()
{
    //创建管道文件
    fifofile ff(_FIFO_PATH_,_FIFO_NAME_);
    //打开管道文件
    file rf(_FIFO_PATH_,_FIFO_NAME_);
    rf._readopen();
    shm sh;
    sh._creat();
    sh._connect();
    char* mas = (char*)sh._get_start_addr();
    //printf("start address : %p\n", mas);
    //读取
    while(true)
    {
        char ch;
        int n = rf._read();
        if(n == 0)
            break;
        printf("%s\n",mas);
        sleep(1);
    }
    //关闭管道文件
    rf._close();
    sleep(1);
    sh._destroy();
    return 0;
}*/